package net.zjitc.cookiesession;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author Administrator
 * @Date 2020/6/2 16:14
 * 1. 访问一个Servlet，如果是第一次访问，
 *     则提示：您好，欢迎您首次访问。
 * 2. 如果不是第一次访问，
 *    则提示：欢迎回来，您上次访问时间为:显示时间字符串
 **/
@WebServlet("/visitTime")
public class VisitTime extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
        * 判断是第一次访问还是不是第一次访问？
        *
        * 1、获取所有cookie（数组）
        * 2、循环遍历该cookie数组
        *    判断cookie的key/name是否是"lastTime"
        *    若是，这表示不是第一次访问：
        *      1）把cookie的该key对应的value值取出来
        *      2）输出提示信息：欢迎回来，上次访问时间是：value
        *      3）把当前时间加到cookie（若key值（lastTime）相同，value会覆盖）
        * 3、若遍历完之后都没有
        *    表示第一次访问：
        *    1）输出提示cincinnati：欢迎首次访问
        *    2）把当前时间加到cookie（key定义为lastTime）
        * */
        /* 设置响应编码*/
        resp.setContentType("text/html;charset=utf-8");
        Cookie[] cookies = req.getCookies();
        /* 表示首次访问*/
        boolean flag=false;
        if(cookies!=null && cookies.length>0){
            for (Cookie c:cookies) {
                String name = c.getName();
                if(name.equals("lastTime")){
                    /* 不是第一次访问*/
                    String value = c.getValue();
                    /* 对value做解码*/
                    value=URLDecoder.decode(value,"utf-8");
                    resp.getWriter().write("欢迎回来，上次访问时间是："+value);
                    /*当前时间会有特殊字符，会乱码，需要处理,先用字符串表示一下 */
                    Date date=new Date();
                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String d = sdf.format(date);
                    String s = URLEncoder.encode(d, "utf-8");
                    c.setValue(s);
                    c.setMaxAge(24*60*60);
                    resp.addCookie(c);
                    /* 表示不是第一次访问*/
                    flag=true;
                    /* 若已经找到相同的，就没有必要再继续循环了，跳出循环*/
                    break;
                }
            }
        }
        /* 首次访问:cookie是空或者flag是false*/
        if(cookies==null || cookies.length==0 || !flag ){
            /*输出提示信息：欢迎首次访问
            * 把当前时间添加到cookie */
            resp.getWriter().write("欢迎首次访问");
            Date date=new Date();
            /* 当前日期时间格式化*/
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String d = sdf.format(date);
            /* 日期时间中有特殊字符，存在cookie需要处理：
            *  存的时候先编码，取的时候再解码*/
            String s = URLEncoder.encode(d, "utf-8");

            Cookie cookie=new Cookie("lastTime",s);
            cookie.setMaxAge(60*60*60);
            resp.addCookie(cookie);
        }


    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}
